MATLAB批量读取文件夹名,文件名,文件数据 您所在的位置:网站首页 matlab读文件名 循环 MATLAB批量读取文件夹名,文件名,文件数据

MATLAB批量读取文件夹名,文件名,文件数据

2023-12-14 08:56| 来源: 网络整理| 查看: 265

目录 一、介绍二、eval函数的用法三、批量读取文件1.读取子文件夹函数2.一些函数的简单介绍3.读取文件夹下特定格式的文件名函数4.批量读取文件夹下的文件名

一、介绍

我们在研究一些课题时,经常会遇到大量的数据需要处理,在存在大量数据文件的时候,需要批量读取文件中的数据,将其转换为矩阵进行计算。 目前笔者要处理的数据是一个项目一个月的数据,如下图所示: 在这里插入图片描述 这里先创建一个在“D:/9月/1日”目录下命名为1日的文件夹,在文件夹中生成100个txt文件。

new_folder= 'D:/9月/1日'; % new_folder 保存要创建的文件夹,是绝对路径+文件夹名称 mkdir(new_folder); % mkdir()函数创建文件夹 cd(new_folder) for i=1:100 eval(['fid=fopen(''a',num2str(i),'.txt''',',','''a+''',');'])%写入文件路径 fprintf(fid,'%.4f\r\n',rand(10,1)); fclose(fid); end

生成100个txt文件。如下图所示: 生成txt文件

二、eval函数的用法

本文大量地使用eval函数,这里对eval函数进行介绍。eval函数能够计算生成的字符串或数值的表达式。 eval(expression)计算字符串表达式中的MATLAB代码。 如果在匿名函数,嵌套函数或包含嵌套函数的函数中使用eval,则求值表达式无法创建变量。 使用格式是: [output1,…,outputN] = eval(表达式)将表达式的输出存储在指定的变量中。

eval(['fid=fopen(''a',num2str(i),'.txt''',',','''a+''',');'])

两个’‘号中第一个’代表转义字符,两个’'号中第二个’号为命令中的’号,使用eval时只需要先把想要表示的语句写好,再用’号分割成一段段字符串,注意上面提到的’可以用作转义字符的情况。 示例代码如下:

eval(['1+1'])

eval函数

三、批量读取文件 1.读取子文件夹函数

代码如下:

function [SubFolders] = GetFolders(ParentFolder) SubFolderNames = dir(ParentFolder); for i=1:length(SubFolderNames) if( isequal( SubFolderNames( i ).name, '.' )||... isequal( SubFolderNames( i ).name, '..')||... ~SubFolderNames( i ).isdir) % 如果不是目录则跳过 continue; end SubFolder(i).SubFolderName = fullfile( ParentFolder, SubFolderNames( i ).name ); end temp = {SubFolder.SubFolderName}; idx = cellfun(@(x)~isempty(x),temp,'UniformOutput',true); % 利用cellfun函数得到元胞数组中所有非空元素的下标 SubFolders = temp(idx); end

这个函数的功能是获取父文件夹下所有子文件夹的路径,函数的输入为ParentFolder是父文件夹路径, 例: ‘D:\Program Files’ 函数的输出为SubFolders是子文件夹路径。为一个元胞数组, 例: {‘D:\Program Files\FileZilla FTP Client\docs’} 读取文件名的结果如下图所示: 读取文件名

2.一些函数的简单介绍

dir函数 示例: dir(’.’) :列出当前目录下所有子文件夹和文件 读取当前文件夹名及当前文件夹下的文件 cellfun函数 cellfun的操作对象就是cell数组,可以利用一些定义的函数对任意类 型的数据或矩阵进行计算,cellfun中可以使用自定义函数对cell数组进行处理。 调用格式为: A = cellfun(FUN, C) cellfun示例

3.读取文件夹下特定格式的文件名函数

代码如下:

function [FileNames] = GetFileNames(Path,Format) fileFolder=fullfile(Path); dirOutput=dir(fullfile(fileFolder,Format)); FileNames={dirOutput.name}; end

这个函数的功能为获得某一路径下,某种格式所有文件名 函数的输入Path是要获取的路径。 示例: ‘D:\Program Files\FileZilla FTP Client\docs’ 函数的输入Format是要获取路径的文件格式。 示例: ‘.txt’,’.docx’,’*.png’

4.批量读取文件夹下的文件名

之前创建的文件名是“1日”,“2日”,…。这里创建cell数组存储读取到的文件名和txt文件的数据,并将读取到的每天的数据以列的形式存储到一个新的矩阵中,并对应的命名为“Q1”,“Q2”,…。

foldernames=GetFolders('D:\9月'); namelist=cell(1,length(foldernames)); for i=1:length(foldernames) a=foldernames{i}; num=str2num(a(7:end-1)); namelist{1,i}=GetFileNames(foldernames{i},'*.freq'); P=cell(1,length(namelist{1,i})); for j=1:length(namelist{1,i}) filename= namelist{i}{j}; P{1,j} = importdata([foldernames{i},'\',filename]); end eval(['Q',num2str(num),'=[]']); for t=1:length(namelist{1,i}) eval(['Q',num2str(num),'=[Q',num2str(num),',P{1,t}.data];']); end end total=[]; for i=1:length(foldernames) eval(['total=[total,Q',num2str(i),'];']); end

读取刚刚创建的‘D:\9月’目录下的100个txt文件的名称,结果如下图所示:

文件名



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有